Implementace INotifyPropertyChanged
Data binding má i své omezení. Plnohodnotný data binding lze vytvořit při dodržení několika podmínek:
- Objekt s cílovou vlastností musí být odvozen od třídy DependencyObject
- Cílová vlastnost musí být DependencyProperty
- Zdrojový objekt musí poskytovat informaci o změně hodnot vlastností.
Elementy co jsou součástí WPF jsou odvozeny od DependencyObject . Jejich vlastnosti jsou vytvořeny jako DependencyProperty. WPF elementy také poskytují upozornění na změnu hodnot vlastností. Při vytváření vlastní třídy nebo ovládacího prvku je potřeba tyto funkce vytvořit.
Pro vytvoření upozornění na změnu dat stačí implementovat rozhraní INotifyPropertyChange. Toto rozhraní obsahuje událost, která upozorní na změnu dat.
Implementace INotifyPropertyChange
public event PropertyChangedEventHandler PropertyChanged ;
protected void OnPropertyChanged(string nazevVlastnosti)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(nazevVlastnosti));
}
}
PropertyChangedEventHandler – typ delegát pro událost PropertyChanged
PropertyChanged – událost pro upozornění na změnu dat
OnPropertyChanged – umístí se tam, kde může dojít ke změně dat
PropertyChanged() – k události je možné přistupovat jako k metodě (protože je typu delegát)
this – objekt, který vyvolal událost (tento objekt)
PropertyChangedEventArgs – tento argument obsahuje název vlastnosti, kde došlo ke změně
Použití události PropertyChanged
private string jmeno;
public string Jmeno
{
get { return jmeno; }
set
{
jmeno = value;
OnPropertyChanged("Jmeno");
}
}
Název vlastnosti musí být přesně zapsaný. Jinak nebude fungovat upozornění na změnu v data bindingu.
Ukázkové řešení: DataBinding/ImpINotifyPropertyChanged